You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在LangChain的ConversationChain中传入自定义JSON上下文实现多轮对话?

解决方案

1. 保留原有数据读取逻辑

先完成Excel到JSON数据集的转换,这部分代码可直接复用:

import boto3
import pandas as pd
import io
from langchain.chat_models import ChatOpenAI
from langchain.chains import ConversationChain
from langchain.memory import ConversationBufferMemory
from langchain.prompts import PromptTemplate

# 读取S3中的Excel文件并转为JSON格式
s3 = boto3.client('s3')
obj = s3.get_object(Bucket='bucketname', Key='sample.xlsx')
data = obj['Body'].read()
df = pd.read_excel(io.BytesIO(data), sheet_name='randomsheetname')
json_data = df.to_dict("records")  # 获取自定义JSON数据集

2. 定义包含JSON数据的对话模板

将JSON数据集作为固定上下文嵌入prompt模板,同时预留对话历史和用户输入的占位:

# 构建对话模板,把JSON数据作为核心上下文传入
prompt_template = PromptTemplate(
    input_variables=["history", "input"],
    template="""请基于以下JSON数据集回答用户问题:
{json_data}

对话历史:
{history}

用户当前问题:{input}

请给出精准回答:"""
)

# 提前填充模板中的固定JSON数据(若数据量过大,建议改用向量存储方案)
prompt = prompt_template.partial(json_data=str(json_data))

3. 配置对话记忆组件

使用ConversationBufferMemory保存对话历史,确保多轮交互时上下文连贯:

# 初始化对话记忆,指定输入和历史的key对应模板变量
memory = ConversationBufferMemory(input_key="input", memory_key="history")

4. 创建对话链条并执行多轮交互

整合LLM、模板和记忆组件,实现带上下文的多轮查询:

# 初始化ChatOpenAI实例
llm = ChatOpenAI(temperature=0.5, openai_api_key="your_api_key", model="gpt-4")

# 创建对话链条
conversation = ConversationChain(
    llm=llm,
    prompt=prompt,
    verbose=True,
    memory=memory
)

# 多轮交互示例
response1 = conversation.predict(input="数据总共有多少条记录?")
print(response1)

response2 = conversation.predict(input="其中status字段为success的记录有多少?")
print(response2)

关键注意事项

  • 数据量适配:如果JSON数据集过大,直接嵌入prompt会消耗大量token,此时建议用LangChain的向量存储(如FAISS)将数据向量化,结合RetrievalQA和对话链条实现检索增强交互,避免token超限。
  • 记忆组件选型:若需要限制记忆长度,可改用ConversationBufferWindowMemory;若需要压缩对话历史,可使用ConversationSummaryMemory。

内容的提问来源于stack exchange,提问作者Mahesh Manjunath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 19:15:15