Eai.Chat (eai v0.1.11)

Copy Markdown

Main conversation GenServer managing multi-session chat history and async LLM tasks.

Summary

Functions

Returns a specification to start this module under a supervisor.

显式关闭一个会话,释放其历史记录。不能关闭 "default" 会话。

导出指定会话的对话历史为 Record 兼容的 gzip 文件。 由 LLM 工具 export_context 或用户手动调用。

强制中断:设置中断标记,模型在下次轮询结果时会自动注入 Ctrl+C。 仅在异步交互模式下有效(同步模式会阻塞,无法调用此函数)。

列出所有活跃会话及其消息数和状态。

从 Record 兼容的 gzip 文件加载消息列表,替换指定会话的对话历史。

统一对话入口。

Functions

child_spec(init_arg)

Returns a specification to start this module under a supervisor.

See Supervisor.

close_chat_session(name)

显式关闭一个会话,释放其历史记录。不能关闭 "default" 会话。

export_history(file_path, chat_session \\ "default")

导出指定会话的对话历史为 Record 兼容的 gzip 文件。 由 LLM 工具 export_context 或用户手动调用。

get_history(chat_session \\ "default")

interrupt!(chat_session \\ "default")

强制中断:设置中断标记,模型在下次轮询结果时会自动注入 Ctrl+C。 仅在异步交互模式下有效(同步模式会阻塞,无法调用此函数)。

list_chat_sessions()

列出所有活跃会话及其消息数和状态。

replace_history(file_path, chat_session \\ "default", format \\ "converse")

从 Record 兼容的 gzip 文件加载消息列表,替换指定会话的对话历史。

format 参数: "converse" (默认) — 消息已是 Eai.Message IR 格式 "openai" — 消息为 OpenAI 格式,需要适配器转换 "anthropic" — 消息为 Anthropic 格式,需要适配器转换

start_link(opts \\ [])

talk(opts \\ [])

统一对话入口。

交互式多行模式(human / :h)

进入后逐行输入`/s` 发送`/c` 取消
发送后立即返回 iex 提示符任务在后台运行结果自动打印
可以随时调用 `Eai.Chat.interrupt!` 中断

iex> Eai.Chat.talk
iex> Eai.Chat.talk(mod: :h, timeout: 10_000)
iex> Eai.Chat.talk(model: :gpt4o)
iex> Eai.Chat.talk(prompt: :coder)
iex> Eai.Chat.talk(chat_session: "work")

单行消息模式(function / :f)

同步等待回复返回 {:ok, reply}  {:error, reason}

iex> Eai.Chat.talk(content: "帮我查一下时间")
iex> Eai.Chat.talk(mod: :f, content: "查时间", timeout: 30_000)
iex> Eai.Chat.talk(content: "hi", model: :claude_sonnet, prompt: :analyst)
iex> Eai.Chat.talk(content: "继续", chat_session: "work")

model / prompt / chat_session 参数

model / prompt  models.exs / prompts.exs 中定义的 :name atom
chat_session 传字符串省略时使用 "default" 会话

iex> Eai.Models.names()         # 查看所有可用模型
iex> Eai.Prompts.list()         # 查看所有可用 prompt
iex> Eai.Chat.list_chat_sessions()  # 查看所有会话