[AI Embedchain] API手册 Chat

chat()允许您通过用户友好的聊天API与您的数据源进行交流。您可以找到下面的签名:

使用方法

带引用

如果您想要得到问题的答案,并返回答案和引用,请使用以下代码片段:

带引用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
from embedchain import App

# Initialize app
app = App()

# Add data source
app.add("https://www.forbes.com/profile/elon-musk")

# Get relevant answer for your query
answer, sources = app.chat("What is the net worth of Elon?", citations=True)
print(answer)
# Answer: The net worth of Elon Musk is $221.9 billion.

print(sources)
# [
#    (
#        'Elon Musk PROFILEElon MuskCEO, Tesla$247.1B$2.3B (0.96%)Real Time Net Worthas of 12/7/23 ...',
#        {
#           'url': 'https://www.forbes.com/profile/elon-musk', 
#           'score': 0.89,
#           ...
#        }
#    ),
#    (
#        '74% of the company, which is now called X.Wealth HistoryHOVER TO REVEAL NET WORTH BY YEARForbes ...',
#        {
#           'url': 'https://www.forbes.com/profile/elon-musk', 
#           'score': 0.81,
#           ...
#        }
#    ),
#    (
#        'founded in 2002, is worth nearly $150 billion after a $750 million tender offer in June 2023 ...',
#        {
#           'url': 'https://www.forbes.com/profile/elon-musk', 
#           'score': 0.73,
#           ...
#        }
#    )
# ]

citations=True 时,请注意返回的 sources 是一个元组的列表,每个元组有两个元素(按以下顺序):

  1. 源块
  2. 源块的相关元数据的字典
    • url: 源的url
    • doc_id: 文档id(用于记录目的)
    • score: 源块相对于问题的分数
    • 您在添加源时可能添加的其他元数据

不带引用

如果您只想返回答案,不想返回引用,您可以使用下面的例子:

不带引用

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from embedchain import App

# Initialize app
app = App()

# Add data source
app.add("https://www.forbes.com/profile/elon-musk")

# Chat on your data using `.chat()`
answer = app.chat("What is the net worth of Elon?")
print(answer)
# Answer: The net worth of Elon Musk is $221.9 billion.

带会话ID

如果您想为不同的用户维护聊天会话,您只需传递 session_id 关键字参数。请看下面的例子:

带会话ID

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from embedchain import App

app = App()
app.add("https://www.forbes.com/profile/elon-musk")

# Chat on your data using `.chat()`
app.chat("What is the net worth of Elon Musk?", session_id="user1")
# 'The net worth of Elon Musk is $250.8 billion.'
app.chat("What is the net worth of Bill Gates?", session_id="user2")
# "I don't know the current net worth of Bill Gates."
app.chat("What was my last question", session_id="user1")
# 'Your last question was "What is the net worth of Elon Musk?"'

带自定义上下文窗口

如果您想在使用聊天时自定义您想要使用的上下文窗口(默认上下文窗口为3个文档块),您可以像下面的代码片段那样做:

带自定义块大小的

1
2
3
4
5
6
7
8
from embedchain import App
from embedchain.config import BaseLlmConfig

app = App()
app.add("https://www.forbes.com/profile/elon-musk")

query_config = BaseLlmConfig(number_documents=5)
app.chat("What is the net worth of Elon Musk?", config=query_config)

使用Mem0来存储聊天历史

Mem0是一种先进的长期记忆,为LLM提供个性化,使GenAI堆栈中的个人化成为可能。它允许LLM记住过去的交互并提供更加个性化的回复。

为了在您的应用中使用Mem0来启用记忆以实现个性化:

  • 使用 pip install mem0ai 安装 mem0 包。
  • 准备 memory 的配置,参考 Configurations

使用mem0

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
from embedchain import App

config = {
  "memory": {
    "top_k": 5
  }
}

app = App.from_config(config=config)
app.add("https://www.forbes.com/profile/elon-musk")

app.chat("What is the net worth of Elon Musk?")

Mem0的工作原理:

  • Mem0将每次用户提问产生的上下文保存到其内存中。
  • 当用户提出新问题时,Mem0检索相关的过去记忆。
  • top_k 参数在内存配置中指定在检索时考虑的顶级记忆的数量。
  • Mem0通过整合用户的问题、数据源的上下文和相关的记忆来生成最终的响应。