基于AWS Bedrock的CrewAI代码生成输出不完整问题排查求助
问题诊断与解决方案
一、输出不完整/语法错误的核心修复
1. 模型参数调整
- Token长度优化:当前设置
max_tokens=10000,Claude 3.5 Sonnet支持最高200k上下文窗口,可将值提升至20000(单文件处理足够),避免因输出长度限制导致代码截断。 - 修正终止序列:原
stop_sequences中的换行格式错误,会触发提前终止输出,改为:
model_kwargs = { "max_tokens": 20000, "temperature": 0.1, "top_k": 250, "top_p": 1, "stop_sequences": ["\n\nHuman:"], }
2. CrewAI配置规范修正
- Crew初始化格式错误:
agents和tasks必须为列表类型,原代码直接传入单个实例会导致逻辑异常,修正后:
# 先创建实例 dev_agent = developer([docs_tool, file_tool]) dev_task_instance = dev_task([docs_tool, file_tool], dev_agent) # 正确初始化Crew crew = Crew( agents=[dev_agent], tasks=[dev_task_instance], verbose=True ) result = crew.kickoff()
- Agent参数优化:单Agent场景下
allow_delegation=True无意义,改为False;若无需上下文记忆,关闭memory=True以减少冗余负载。 - 任务描述明确化:原任务描述未限定处理范围,补充细节避免模糊输出:
description = ( "Read all code files in the specified directory, refactor each file to improve readability. " "Return only the complete, syntactically valid refactored code for each file, no comments or explanations." )
3. 代码库大小处理
若待分析代码库过大,单次传入的内容会超出模型上下文限制,导致输出截断:
- 拆分任务:将“重构整个代码库”拆分为“按单个文件重构”的子任务,让Agent逐文件处理。
- 工具配置:限制
DirectoryReadTool仅读取指定类型文件(如.py),避免加载无关文档。
二、Llama3/Mistral模型兼容问题
Bedrock上的Llama3、Mistral需匹配特定调用格式,兼容CrewAI需注意:
- 检查boto3版本:确保版本≥1.34.0,支持Bedrock上的开源模型调用。
- 适配模型参数:不同模型的终止序列、输入格式不同,比如Llama3的
stop_sequences需设为["<|end_of_solution|>"],调整model_kwargs适配对应模型要求。 - 自定义包装:若ChatBedrock默认适配不兼容,可基于LangChain自定义模型包装类,统一输入输出格式。
三、Bedrock实现程序化向量化
可直接使用Bedrock上的Amazon Titan Embeddings解决本地向量化速度慢的问题,示例代码:
from langchain.embeddings import BedrockEmbeddings # 初始化Bedrock嵌入模型 bedrock_embeddings = BedrockEmbeddings( client=bedrock, model_id="amazon.titan-embed-text-v1" ) # 替代本地嵌入模型,用于代码库向量化检索
内容的提问来源于stack exchange,提问作者Mogoli
相关产品推荐
相关产品推荐

