微信扫码
与创始人交个朋友
我要投稿
模型列表
BAAI/bge-m3Qwen/Qwen2-0.5B-Instruct
环境配置
langchain==0.2.10 langchain-core torch faiss-cpu langchain_community
加载模型
from langchain_openai import ChatOpenAI, OpenAIEmbeddings
openai_model = ChatOpenAI(model="gpt-3.5-turbo-0125", temperature=0.0)
embeddings = OpenAIEmbeddings()
openai_model.invoke("What is 2 ? 4?")
AIMessage(content='The expression "2 ? 4" is not a standard mathematical operation or equation. It appears to be a combination of the number 2 and the parrot emoji ? followed by the number 9. It does not have a specific mathematical meaning.', response_metadata={'token_usage': {'completion_tokens': 54, 'prompt_tokens': 17, 'total_tokens': 71}, 'model_name': 'gpt-3.5-turbo-0125', 'system_fingerprint': None, 'finish_reason': 'stop', 'logprobs': None}, id='run-aad12dda-5c47-4a1e-9949-6fe94e03242a-0', usage_metadata={'input_tokens': 17, 'output_tokens': 54, 'total_tokens': 71})
得到的结果如下:The expression "2 ? 4" is not a standard mathematical operation or equation. It appears to be a combination of the number 2 and the parrot emoji ? followed by the number 9. It does not have a specific mathematical meaning.
加载本地模型:
感兴趣可以参考RAG:Langchain中使用自己的LLM大模型 RAG:在LangChain中使用本地向量embedding模型
from utils import load_custom_model, CustomEmbedding
chat_model = load_custom_model("./Qwen/Qwen2-0.5B-Instruct")
embeddings = CustomEmbedding("./ckpt/bge-m3")
chat_model.invoke("What is 2 ? 4?")
chat_model.invoke("What is 2 ? 4?")# AIMessage(content='It seems like you're using emojis, but I'm not sure what you mean by "2 ? 4". Could you please provide more context or clarify your question?', id='run-df7ad53b-4423-45f0-9e4e-b88a146f5658-0')chat_model.invoke("中国的春城是哪里?")# AIMessage(content='中国的春城是指昆明。', id='run-5b4ba399-0f87-43f4-b0d3-b45c854a1572-0')
得到的结果如下:
It seems like you're using emojis, but I'm not sure what you mean by "2 ? 4". Could you please provide more context or clarify your question?
两个回答都还可以,我们看看fewshot将会产生什么效果呢?
如何加入FewShot
方法一 examples
整体思路是,先将examples拼接成messages,再送入到chatprompttemplate中。直接上代码:
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
# 示例
examples = [
{"input": "2 ? 2", "output": "4"},
{"input": "2 ? 3", "output": "5"},
{"input": "4 ? 5", "output": "9"},
{"input": "3 ? 8", "output": "11"}
]
# 示例的prompt模板
example_prompt = ChatPromptTemplate.from_messages(
[
("human", "{input}"),
("ai", "{output}"),
]
)
# 示例拼接
few_shot_prompt = FewShotChatMessagePromptTemplate(
example_prompt=example_prompt,
examples=examples,
)
print(few_shot_prompt.invoke({}).to_messages())
# [HumanMessage(content='2 ? 2'), AIMessage(content='4'), HumanMessage(content='2 ? 3'), AIMessage(content='5')]
# 示例加入到整个大模型中
final_prompt = ChatPromptTemplate.from_messages(
[
("system", "You are a wondrous wizard of math."),
few_shot_prompt,
("human", "{input}"),
]
)
# 下面是What is 3 ? 5?拼接的结果
# ChatPromptValue(messages=[SystemMessage(content='You are a wondrous wizard of math.'), HumanMessage(content='2 ? 2'), AIMessage(content='4'), HumanMessage(content='2 ? 3'), AIMessage(content='5'), HumanMessage(content='4 ? 5'), AIMessage(content='9'), HumanMessage(content='3 ? 8'), AIMessage(content='11'), HumanMessage(content='What is 3 ? 5?')])
chain = final_prompt | chat_model
print(chain.invoke({"input": "What is 2 ? 5?"}))# content='7' id='run-367961cf-ea5b-4c99-bd85-a8494fd3bfe8-0'print(chain.invoke({"input": "What is 3 ? 4?"}))# content='7' id='run-56465db6-4ebc-4efe-9b2c-b9da7ebdec4c-0'print(chain.invoke({"input": "What is 3 ? 3?"}))# content='6' id='run-abc9a040-10fc-41a2-9cd5-8ed365f62b89-0'print(chain.invoke({"input": "What is 3 ? 9?"}))# content='6' id='run-443df1ee-3380-489c-9900-1c43e1e35bb5-0'
看上面的结果模型知道了这个表达是在干什么,可以正确输出答案了。但是0.5B的模型还是有点傻缺,错误的也挺多,大家可以自测试一下。
方法二 example_selector
这个方法与方法一相比,多了一个示例检索的步骤,因此我们需要创建一个检索器。方法复杂一点,但是可以在示例中添加与问题相关的例子。
from langchain_community.vectorstores import FAISS
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
# 示例
examples = [
{"input": "2 ? 2", "output": "4"},
{"input": "2 ? 3", "output": "5"},
{"input": "2 ? 4", "output": "6"},
{"input": "中国的首都是哪里?", "output": "北京"},
{"input": "中国经济中心是哪里", "output": "上海"}
]
# 创建向量检索库
to_vectorize = [" ".join(example.values()) for example in examples]
vectorstore = FAISS.from_texts(to_vectorize, embeddings, metadatas=examples)
# 创建示例检索器
example_selector = SemanticSimilarityExampleSelector(
vectorstore=vectorstore,
k=2, # 示例个数
)
print(example_selector.select_examples({"input": "中国的春城是哪里"}))
# [{'input': '中国的首都是哪里?', 'output': '北京'}, {'input': '中国经济中心是哪里', 'output': '上海'}]
# Create prompt template
from langchain_core.prompts import ChatPromptTemplate, FewShotChatMessagePromptTemplate
# Define the few-shot prompt.
few_shot_prompt = FewShotChatMessagePromptTemplate(
# 定义example_selector的输入字段为input
input_variables=["input"],
example_selector=example_selector,
# 示例的prompt模板
example_prompt=ChatPromptTemplate.from_messages(
[("human", "{input}"), ("ai", "{output}")]
),
)
final_prompt = ChatPromptTemplate.from_messages(
[
("system", "你是一个精通中国的ai助手"),
few_shot_prompt,
("human", "{input}"),
]
)
检索结果展示:
print(example_selector.select_examples({"input": "中国的春城是哪里?"}))
# [{'input': '中国的首都是哪里?', 'output': '北京'}, {'input': '中国经济中心是哪里', 'output': '上海'}]
print(few_shot_prompt.invoke(input="中国的春城是哪里?").to_messages())
# [HumanMessage(content='中国的首都是哪里?'), AIMessage(content='北京'), HumanMessage(content='中国经济中心是哪里'), AIMessage(content='上海')]
对话结果展示
原始模型结果(使用原生的模型):
chat_model.invoke("中国的春城是哪里?")
# AIMessage(content='中国的春城是指昆明。', id='run-731aca8a-3a25-41a7-a5f8-52c30a53af2f-0')
chat_model.invoke("东方明珠在哪里")
# AIMessage(content='东方明珠位于中国上海市浦东新区,是上海的标志性建筑之一。它高约468米,是世界上最高的电视塔。', id='run-116fe79d-9b3e-4796-9d8e-ee9d2edf9306-0')
使用Few-Shot后的模型:
chain = final_prompt | chat_model
chain.invoke({"input": "中国的春城是哪里?"})
# AIMessage(content='昆明', id='run-159c892d-43ff-4350-85bc-7e11e8882b9d-0')
chain.invoke({"input": "东方明珠在哪里"})
# AIMessage(content='上海', id='run-3225ba64-23db-4b6b-96ce-a72d49de8af3-0')
从上面的例子可以发现,使用Few-Shot后模型的结果更接近我们的设定了。Few-Shot可以直观的告诉模型,我们想要做什么,要达到什么目的,有效提升模型效果,大家跑起来吧。。
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-11-13
只需8步,手把手教你用LangGraph创建AI智能体
2024-11-13
使用 LangChain 建立一个会话式的 RAG Agent 系统
2024-11-12
一文深度了解Agent智能体以及认知架构
2024-11-12
使用LangChain建立检索增强生成(RAG)系统
2024-11-11
Qwen-Agent 核心点说明
2024-11-11
吴恩达分享五个AI趋势,重点谈了多AI代理的美好前景
2024-11-11
使用 LangChain 构建一个 Agent(智能体/代理)
2024-11-10
使用 LangChain 构建一个有记忆的聊天机器人
2024-08-18
2024-04-08
2024-06-03
2024-04-08
2024-04-17
2024-06-24
2024-04-12
2024-04-10
2024-07-01
2024-04-11
2024-10-30
2024-10-11
2024-08-18
2024-08-16
2024-08-04
2024-07-29
2024-07-28
2024-07-27