功能说明:使用 LangChain 调用语言模型生成文本。
代码示例:
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
# 创建提示模板
prompt = PromptTemplate(
template="请写一篇关于 {topic} 的短文,长度约 200 字。",
input_variables=["topic"]
)
# 创建模型实例
llm = OpenAI(
model_name="text-davinci-003",
temperature=0.7,
max_tokens=300
)
# 创建链
chain = prompt | llm
# 执行链
result = chain.invoke({"topic": "人工智能的未来"})
print(result)最佳实践:
- 根据任务类型选择合适的模型
- 调整 temperature 参数以平衡创造力和准确性
- 设置合理的 max_tokens 以控制输出长度
功能说明:使用聊天模型进行对话交互。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
# 创建聊天提示模板
prompt = ChatPromptTemplate.from_messages([
SystemMessage(content="你是一个友好的助手,能够回答各种问题。"),
HumanMessage(content="{question}")
])
# 创建聊天模型实例
chat_model = ChatOpenAI(
model_name="gpt-3.5-turbo",
temperature=0.7
)
# 创建链
chain = prompt | chat_model
# 执行链
result = chain.invoke({"question": "什么是 LangChain?"})
print(result.content)最佳实践:
- 使用 SystemMessage 设置助手的角色和行为
- 对于多轮对话,保存对话历史并在每次调用时包含
- 使用流式输出提高用户体验
功能说明:使用不同类型的提示模板构建复杂提示。
代码示例:
from langchain_core.prompts import (
PromptTemplate,
ChatPromptTemplate,
FewShotPromptTemplate,
SystemMessagePromptTemplate,
HumanMessagePromptTemplate
)
# 1. 基本提示模板
basic_prompt = PromptTemplate(
template="{greeting}, {name}!今天过得怎么样?",
input_variables=["greeting", "name"]
)
# 2. 聊天提示模板
chat_prompt = ChatPromptTemplate.from_messages([
SystemMessagePromptTemplate.from_template("你是一个专业的 {role}。"),
HumanMessagePromptTemplate.from_template("{question}")
])
# 3. 少样本提示模板
examples = [
{"input": "1 + 1", "output": "2"},
{"input": "2 + 2", "output": "4"},
{"input": "3 + 3", "output": "6"}
]
example_prompt = PromptTemplate(
template="输入: {input}\n输出: {output}",
input_variables=["input", "output"]
)
few_shot_prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix="计算以下数学表达式:",
suffix="输入: {input}\n输出:",
input_variables=["input"]
)
# 使用示例
print("基本提示模板:")
print(basic_prompt.format(greeting="你好", name="张三"))
print("\n聊天提示模板:")
print(chat_prompt.format(role="程序员", question="如何使用 Python 函数?"))
print("\n少样本提示模板:")
print(few_shot_prompt.format(input="4 + 4"))最佳实践:
- 根据任务类型选择合适的提示模板类型
- 使用少样本提示模板提供示例,帮助模型理解任务
- 对于复杂任务,使用结构化提示提高清晰度
功能说明:加载文档并生成摘要。
代码示例:
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
from langchain_community.document_loaders import TextLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 加载文档
loader = TextLoader("docs/introduction.txt")
documents = loader.load()
# 分割文档
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
document_chunks = text_splitter.split_documents(documents)
# 创建摘要提示模板
summary_prompt = PromptTemplate(
template="请摘要以下文档内容,长度约 150 字:\n\n{document}",
input_variables=["document"]
)
# 创建模型
llm = OpenAI(temperature=0.3)
# 创建链
chain = summary_prompt | llm
# 处理每个文档块
for i, chunk in enumerate(document_chunks):
print(f"\n--- 文档块 {i+1} 摘要 ---")
result = chain.invoke({"document": chunk.page_content})
print(result)最佳实践:
- 根据文档类型选择合适的加载器
- 优化分割策略以适应文档结构
- 对于长文档,考虑使用摘要链或映射-归约模式
功能说明:从文档中检索相关信息并生成回答。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import TextLoader
from langchain_community.vectorstores import Chroma
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 加载文档
loader = TextLoader("docs/introduction.txt")
documents = loader.load()
# 分割文档
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
document_chunks = text_splitter.split_documents(documents)
# 创建嵌入
embeddings = OpenAIEmbeddings()
# 创建向量存储
vectorstore = Chroma.from_documents(
documents=document_chunks,
embedding=embeddings
)
# 创建检索器
retriever = vectorstore.as_retriever(
search_kwargs={"k": 3} # 检索前 3 个最相关的文档
)
# 创建提示模板
rag_prompt = ChatPromptTemplate.from_template("""
你是一个专业的问答助手,请根据以下文档内容回答问题。
文档内容:
{context}
问题:
{question}
回答:
""")
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建 RAG 链
rag_chain = (
{
"context": retriever,
"question": RunnablePassthrough()
}
| rag_prompt
| model
| StrOutputParser()
)
# 执行链
result = rag_chain.invoke("LangChain 的主要功能是什么?")
print(result)最佳实践:
- 选择合适的向量存储以适应规模和性能需求
- 优化检索参数以提高相关性
- 设计有效的提示模板以引导模型使用检索到的信息
功能说明:创建能够使用工具的智能代理。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain.agents import create_openai_functions_agent, AgentExecutor
# 定义工具
@tool
def search(query: str) -> str:
"""搜索网络获取关于特定主题的最新信息"""
# 这里是模拟搜索结果
return f"搜索结果:关于 '{query}' 的最新信息显示,这是一个重要的主题,有很多相关内容。"
@tool
def calculate(expression: str) -> str:
"""计算数学表达式的结果"""
try:
result = eval(expression)
return f"计算结果:{expression} = {result}"
except Exception as e:
return f"计算错误:{str(e)}"
# 创建工具列表
tools = [search, calculate]
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
(
"system",
"你是一个智能助手,能够使用工具来帮助用户解决问题。\n"
"请根据用户的问题,选择合适的工具来获取信息或执行计算。\n"
"如果需要使用工具,请使用正确的工具名称和参数。\n"
"请保持回答简洁明了,直接提供用户需要的信息。"
),
("human", "{input}"),
("ai", "{agent_scratchpad}")
])
# 创建模型
model = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.3)
# 创建代理
agent = create_openai_functions_agent(model, tools, prompt)
# 创建代理执行器
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
return_only_outputs=True
)
# 执行代理
result = agent_executor.invoke({
"input": "2023 年世界杯冠军是谁?另外,请计算 12345 乘以 67890 的结果。"
})
print("\n代理回答:")
print(result["output"])最佳实践:
- 为工具提供清晰详细的描述
- 设计有效的提示模板以引导代理行为
- 设置合理的最大迭代次数以防止无限循环
功能说明:创建多个专业代理并让它们协作完成复杂任务。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import tool
from langchain_openai import ChatOpenAI
from langchain.agents import create_openai_functions_agent, AgentExecutor
from langchain.memory import ConversationBufferMemory
# 定义工具
@tool
def research_topic(topic: str) -> str:
"""研究特定主题的详细信息"""
return f"关于 '{topic}' 的研究结果:这是一个重要的主题,包含很多详细信息。"
@tool
def write_report(topic: str, research: str) -> str:
"""根据研究结果撰写报告"""
return f"基于研究结果,我已经撰写了关于 '{topic}' 的详细报告。"
@tool
def edit_report(report: str) -> str:
"""编辑和优化报告内容"""
return f"我已经编辑和优化了报告,使其更加清晰和专业。"
# 创建研究代理
research_tools = [research_topic]
research_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的研究人员,擅长收集和整理信息。"),
("human", "{input}"),
("ai", "{agent_scratchpad}")
])
# 创建写作代理
writing_tools = [write_report]
writing_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的作家,擅长撰写清晰、专业的报告。"),
("human", "{input}"),
("ai", "{agent_scratchpad}")
])
# 创建编辑代理
editing_tools = [edit_report]
editing_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的编辑,擅长优化和改进文档。"),
("human", "{input}"),
("ai", "{agent_scratchpad}")
])
# 创建模型
model = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0.3)
# 创建代理
research_agent = create_openai_functions_agent(model, research_tools, research_prompt)
writing_agent = create_openai_functions_agent(model, writing_tools, writing_prompt)
editing_agent = create_openai_functions_agent(model, editing_tools, editing_prompt)
# 创建代理执行器
research_executor = AgentExecutor(
agent=research_agent,
tools=research_tools,
verbose=True,
return_only_outputs=True
)
writing_executor = AgentExecutor(
agent=writing_agent,
tools=writing_tools,
verbose=True,
return_only_outputs=True
)
editing_executor = AgentExecutor(
agent=editing_agent,
tools=editing_tools,
verbose=True,
return_only_outputs=True
)
# 执行多代理协作流程
topic = "人工智能在医疗领域的应用"
# 1. 研究阶段
print("=== 研究阶段 ===")
research_result = research_executor.invoke({"input": f"请研究 '{topic}' 的最新发展和应用案例。"})
research_content = research_result["output"]
print(research_content)
# 2. 写作阶段
print("\n=== 写作阶段 ===")
writing_result = writing_executor.invoke({"input": f"请根据以下研究结果撰写一份关于 '{topic}' 的报告:\n{research_content}"})
report_content = writing_result["output"]
print(report_content)
# 3. 编辑阶段
print("\n=== 编辑阶段 ===")
editing_result = editing_executor.invoke({"input": f"请编辑和优化以下报告:\n{report_content}"})
final_report = editing_result["output"]
print(final_report)
print("\n=== 最终报告 ===")
print(final_report)最佳实践:
- 为每个代理定义明确的角色和职责
- 设计有效的代理间通信机制
- 实现错误处理和回退策略
功能说明:构建包含多个步骤的复杂工作流。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnableParallel, RunnableSequence
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建提示模板
topic_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个创意顾问,擅长生成有趣的讨论主题。"),
("human", "请为 {audience} 生成 3 个关于 {category} 的讨论主题。")
])
outline_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个内容策划师,擅长为主题创建详细大纲。"),
("human", "请为以下主题创建一个详细的讨论大纲:{topic}")
])
content_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业作家,擅长根据大纲撰写内容。"),
("human", "请根据以下大纲撰写详细内容:{outline}")
])
# 创建链
topic_chain = topic_prompt | model | StrOutputParser()
outline_chain = outline_prompt | model | StrOutputParser()
content_chain = content_prompt | model | StrOutputParser()
# 创建并行链以生成多个主题
parallel_topics = RunnableParallel(
topic1=RunnableSequence(lambda x: {"audience": x["audience"], "category": x["category"]}) | topic_chain,
topic2=RunnableSequence(lambda x: {"audience": x["audience"], "category": x["category"]}) | topic_chain,
topic3=RunnableSequence(lambda x: {"audience": x["audience"], "category": x["category"]}) | topic_chain
)
# 创建完整工作流
workflow = RunnableSequence(
# 1. 生成主题
parallel_topics,
# 2. 为每个主题创建大纲
lambda topics: {
"outline1": outline_chain.invoke({"topic": topics["topic1"]}),
"outline2": outline_chain.invoke({"topic": topics["topic2"]}),
"outline3": outline_chain.invoke({"topic": topics["topic3"]})
},
# 3. 为每个大纲生成内容
lambda outlines: {
"content1": content_chain.invoke({"outline": outlines["outline1"]}),
"content2": content_chain.invoke({"outline": outlines["outline2"]}),
"content3": content_chain.invoke({"outline": outlines["outline3"]})
}
)
# 执行工作流
result = workflow.invoke({
"audience": "数据科学家",
"category": "机器学习"
})
# 输出结果
for i in range(1, 4):
print(f"\n--- 内容 {i} ---")
print(result[f"content{i}"])最佳实践:
- 使用 RunnableParallel 并行执行独立任务
- 使用 RunnableSequence 构建顺序工作流
- 设计清晰的数据传递机制
批处理
功能说明:使用批处理提高多个相似请求的处理效率。
代码示例:
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
# 创建提示模板
prompt = PromptTemplate(
template="请为 {product} 生成一句简短的广告语。",
input_variables=["product"]
)
# 创建模型
llm = OpenAI(temperature=0.7)
# 创建链
chain = prompt | llm
# 批量处理多个请求
products = ["智能手机", "笔记本电脑", "智能手表", "平板电脑"]
inputs = [{"product": product} for product in products]
# 执行批处理
results = chain.batch(inputs)
# 输出结果
for product, result in zip(products, results):
print(f"\n{product}: {result.strip()}")流式输出
功能说明:使用流式输出提高用户体验。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的作家,擅长撰写详细的文章。"),
("human", "请写一篇关于 {topic} 的详细文章,长度约 500 字。")
])
# 创建模型
model = ChatOpenAI(temperature=0.7)
# 创建链
chain = prompt | model
# 执行流式输出
print("正在生成文章...\n")
for chunk in chain.stream({"topic": "人工智能的伦理问题"}):
if hasattr(chunk, 'content') and chunk.content:
print(chunk.content, end="", flush=True)结构化提示
功能说明:使用结构化提示提高模型理解和输出质量。
代码示例:
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import StrOutputParser
# 创建结构化提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的产品评论家,擅长分析产品的优缺点。\n"
"请按照以下结构分析产品:\n"
"1. 产品概述\n"
"2. 优点(至少 3 点)\n"
"3. 缺点(至少 2 点)\n"
"4. 改进建议\n"
"5. 总体评价"),
("human", "请分析 {product}。")
])
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建链
chain = prompt | model | StrOutputParser()
# 执行链
result = chain.invoke({"product": "最新款智能手机"})
print(result)少样本提示
功能说明:使用少样本提示帮助模型理解复杂任务。
代码示例:
from langchain_core.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_openai import OpenAI
# 示例
examples = [
{
"input": "将 '我喜欢编程' 翻译成英语",
"output": "I like programming"
},
{
"input": "将 '今天天气很好' 翻译成英语",
"output": "The weather is nice today"
},
{
"input": "将 '我想吃苹果' 翻译成英语",
"output": "I want to eat an apple"
}
]
# 创建示例提示模板
example_prompt = PromptTemplate(
template="输入: {input}\n输出: {output}",
input_variables=["input", "output"]
)
# 创建少样本提示模板
prompt = FewShotPromptTemplate(
examples=examples,
example_prompt=example_prompt,
prefix="请按照示例将中文翻译成英语:",
suffix="输入: {input}\n输出:",
input_variables=["input"]
)
# 创建模型
llm = OpenAI(temperature=0.0)
# 创建链
chain = prompt | llm
# 执行链
result = chain.invoke({"input": "将 '我爱学习 LangChain' 翻译成英语"})
print(result)重试机制
功能说明:使用重试机制处理临时故障。
代码示例:
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
from langchain_core.runnables import RunnableLambda
# 创建模型
llm = OpenAI(temperature=0.7)
# 创建提示模板
prompt = PromptTemplate(
template="请写一篇关于 {topic} 的短文。",
input_variables=["topic"]
)
# 创建带重试的链
chain = prompt | llm.with_retry(
stop_after_attempt=3,
wait_exponential_jitter=True
)
# 执行链
result = chain.invoke({"topic": "人工智能的未来"})
print(result)异常处理
功能说明:使用异常处理提高系统可靠性。
代码示例:
from langchain_core.prompts import PromptTemplate
from langchain_openai import OpenAI
# 创建模型
llm = OpenAI(temperature=0.7)
# 创建提示模板
prompt = PromptTemplate(
template="请写一篇关于 {topic} 的短文。",
input_variables=["topic"]
)
# 创建链
chain = prompt | llm
# 执行链并处理异常
try:
result = chain.invoke({"topic": "人工智能的未来"})
print(result)
except Exception as e:
print(f"发生错误: {str(e)}")
# 提供备用响应
print("系统暂时无法生成内容,请稍后再试。")使用 LangSmith
功能说明:使用 LangSmith 监控和评估 LLM 应用。
代码示例:
import os
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
# 设置 LangSmith 环境变量
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "your-langsmith-api-key"
os.environ["LANGCHAIN_PROJECT"] = "my-project"
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的助手,能够回答各种问题。"),
("human", "{question}")
])
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建链
chain = prompt | model
# 执行链
result = chain.invoke({"question": "什么是 LangChain?"})
print(result.content)
# 现在可以在 LangSmith 中查看执行情况
print("\n执行详情已发送到 LangSmith,请登录查看。")日志记录
功能说明:实现详细的日志记录。
代码示例:
import logging
from langchain_core.prompts import ChatPromptTemplate
from langchain_openai import ChatOpenAI
from langchain_core.callbacks import StdOutCallbackHandler
# 配置日志
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的助手。"),
("human", "{question}")
])
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建链
chain = prompt | model
# 执行链并记录日志
logger.info("开始执行链")
try:
result = chain.invoke(
{"question": "什么是 LangChain?"},
config={"callbacks": [StdOutCallbackHandler()]}
)
logger.info("链执行成功")
print("\n模型回答:")
print(result.content)
except Exception as e:
logger.error(f"链执行失败: {str(e)}")
print(f"错误: {str(e)}")功能说明:构建基于文档的问答系统。
解决方案:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.vectorstores import FAISS
from langchain_text_splitters import RecursiveCharacterTextSplitter
# 加载文档
loader = PyPDFLoader("docs/manual.pdf")
documents = loader.load()
# 分割文档
text_splitter = RecursiveCharacterTextSplitter(
chunk_size=1000,
chunk_overlap=200
)
document_chunks = text_splitter.split_documents(documents)
# 创建嵌入
embeddings = OpenAIEmbeddings()
# 创建向量存储
vectorstore = FAISS.from_documents(
documents=document_chunks,
embedding=embeddings
)
# 保存向量存储
vectorstore.save_local("vectorstore")
# 加载向量存储
# vectorstore = FAISS.load_local("vectorstore", embeddings)
# 创建检索器
retriever = vectorstore.as_retriever(
search_kwargs={"k": 4}
)
# 创建提示模板
prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的问答助手,能够根据提供的文档回答问题。\n"
"请严格根据文档内容回答问题,不要添加文档中没有的信息。\n"
"如果文档中没有相关信息,请明确说明。"),
("human", "文档内容:\n{context}\n\n问题:{question}")
])
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建链
chain = (
{
"context": retriever,
"question": RunnablePassthrough()
}
| prompt
| model
| StrOutputParser()
)
# 测试问答
questions = [
"产品的主要功能是什么?",
"如何安装和配置产品?",
"产品的系统要求是什么?",
"如何 troubleshooting 常见问题?"
]
for question in questions:
print(f"\n=== 问题: {question} ===")
result = chain.invoke(question)
print(result)功能说明:构建内容生成系统。
解决方案:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# 创建模型
model = ChatOpenAI(temperature=0.7)
# 创建提示模板
title_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个创意作家,擅长生成吸引人的标题。"),
("human", "请为关于 {topic} 的文章生成 5 个吸引人的标题。")
])
outline_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个内容策划师,擅长为文章创建详细大纲。"),
("human", "请为标题为 '{title}' 的文章创建详细大纲。")
])
content_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的作家,擅长根据大纲撰写详细的文章。"),
("human", "请根据以下大纲撰写详细的文章,长度约 800 字:\n{outline}")
])
# 创建链
title_chain = title_prompt | model | StrOutputParser()
outline_chain = outline_prompt | model | StrOutputParser()
content_chain = content_prompt | model | StrOutputParser()
# 执行内容生成流程
topic = "远程工作的未来"
print("=== 生成标题 ===")
titles = title_chain.invoke({"topic": topic})
print(titles)
# 选择一个标题
selected_title = titles.split("\n")[0].strip().lstrip("1. ").lstrip("-")
print(f"\n=== 选定标题 ===")
print(selected_title)
print("\n=== 生成大纲 ===")
outline = outline_chain.invoke({"title": selected_title})
print(outline)
print("\n=== 生成内容 ===")
content = content_chain.invoke({"outline": outline})
print(content)
print("\n=== 最终文章 ===")
print(f"# {selected_title}")
print(content)功能说明:使用 LLM 分析和解释数据。
解决方案:
import pandas as pd
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# 创建示例数据
data = {
"产品": ["产品 A", "产品 B", "产品 C", "产品 D", "产品 E"],
"销售额": [120000, 95000, 150000, 80000, 110000],
"销售量": [1200, 950, 1500, 800, 1100],
"地区": ["华东", "华北", "华南", "西南", "东北"]
}
df = pd.DataFrame(data)
# 将数据转换为字符串
data_str = df.to_string()
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建提示模板
analysis_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个数据分析专家,擅长分析销售数据并提供洞察。"),
("human", "请分析以下销售数据,提供详细的分析报告,包括:\n"
"1. 总体销售情况\n"
"2. 各产品销售表现\n"
"3. 地区销售分布\n"
"4. 销售趋势和洞察\n"
"5. 改进建议\n\n"
"数据:\n{data}")
])
# 创建链
chain = analysis_prompt | model | StrOutputParser()
# 执行链
result = chain.invoke({"data": data_str})
print("=== 数据分析报告 ===")
print(result)功能说明:使用 LLM 生成和优化代码。
解决方案:
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_openai import ChatOpenAI
# 创建模型
model = ChatOpenAI(temperature=0.3)
# 创建提示模板
code_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的 Python 程序员,擅长编写清晰、高效的代码。\n"
"请提供完整的代码,并添加适当的注释。\n"
"确保代码能够正确运行,并且符合 Python 最佳实践。"),
("human", "请编写一个 Python 函数,用于 {task}。\n"
"要求:\n{requirements}")
])
test_prompt = ChatPromptTemplate.from_messages([
("system", "你是一个专业的测试工程师,擅长为 Python 代码编写测试用例。"),
("human", "请为以下 Python 代码编写详细的测试用例:\n{code}")
])
# 创建链
code_chain = code_prompt | model | StrOutputParser()
test_chain = test_prompt | model | StrOutputParser()
# 执行代码生成
result = code_chain.invoke({
"task": "计算斐波那契数列",
"requirements": "\n".join([
"1. 函数应该接受一个整数 n,返回第 n 个斐波那契数",
"2. 实现递归和迭代两种方法",
"3. 添加输入验证",
"4. 包含详细的文档字符串"
])
})
print("=== 生成的代码 ===")
print(result)
# 生成测试用例
test_result = test_chain.invoke({"code": result})
print("\n=== 生成的测试用例 ===")
print(test_result)LangChain 提供了丰富的工具和组件,使得构建 LLM 应用变得更加简单和灵活。通过本文档的示例和最佳实践,您应该能够:
- 快速入门:使用基础示例快速上手 LangChain
- 构建复杂应用:使用中级和高级示例构建更复杂的应用
- 优化性能:应用最佳实践提高应用性能和可靠性
- 解决常见问题:使用常见场景解决方案处理各种应用场景
持续学习建议:
- 关注 LangChain 的最新更新和功能
- 参与 LangChain 社区,学习和分享经验
- 尝试构建不同类型的应用,积累实践经验
- 关注提示工程和 LLM 技术的最新发展
通过不断学习和实践,您将能够充分利用 LangChain 的能力,构建创新的 LLM 应用,为用户创造价值。